﻿using SWBetongXaydung.BLL;
using SWBetongXaydung.DAL;
using SWBetongXaydung.GUI.Common;
using SWBetongXaydung.GUI.Utils;
using SWBetongXaydung.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SWBetongXaydung.GUI.TacNghiep
{
    public partial class UCBangPhanCongLaiXe : BaseUserControl
    {
        bool allowUpdate = true;
        bool isAdd = false;
        BETONGXAYDUNGEntities _dbContext = null;

        public BETONGXAYDUNGEntities DBContext
        {
            get
            {
                if (_dbContext == null)
                    _dbContext = DBContextHelper.GetContext();
                return _dbContext;
            }
        }

        public UCBangPhanCongLaiXe()
        {
            InitializeComponent();
            InitDatagrid();
            InitLoc();
            cmbNam.Text = DateTime.Now.Year.ToString();
            cmbThang.Text = DateTime.Now.Month.ToString();
            chkLoc.Checked = true;
            LoadXe();
            LoadTaiXe();
            InitInterface();
        }

        void InitDatagrid()
        {
            dgPhanCongLaiXe.AutoGenerateColumns = false;
            colSoXe.DataPropertyName = "SoXe";
            colTaiXe.DataPropertyName = "TenDayDu";
            colNgayNhan.DataPropertyName = "NgayNhanXe";
            dgPhanCongLaiXe.Columns["colNgayNhan"].DefaultCellStyle.Format = "dd/MM/yyyy";
            colNgayTra.DataPropertyName = "NgayTraXe";
            dgPhanCongLaiXe.Columns["colNgayTra"].DefaultCellStyle.Format = "dd/MM/yyyy";
            colNhienLieuNhan.DataPropertyName = "LuongNhienLieuKhiNhanXe";
            colNhienLieuTra.DataPropertyName = "LuongNhienLieuKhiTraXe";
        }

        void InitInterface()
        {
            allowUpdate = false;
            btnXoa.Enabled = btnHieuChinh.Enabled = false;
            btnLuu.Enabled = false;
            chkTraXe.Enabled = dtNgayTraXe.Enabled = nNhienLieuTra.Enabled = false;
            cmbSoXe.Enabled = cmbTaiXe.Enabled = dtNgayNhanXe.Enabled = nNhienLieuNhan.Enabled = false;
            btnThem.Enabled = true;
            btnBoQua.Visible = false;
            dgPhanCongLaiXe.Enabled = true;
            InitModeEdit();
            allowUpdate = true;
            LoadPhanCongLaiXe();
            btnThem.Focus();
        }

        void LoadXe()
        {
            cmbSoXe.DataSource = XeBLL.GetList(DBContext);
            cmbSoXe.DisplayMember = "SoXe";
            cmbSoXe.ValueMember = "SoXe";
        }

        void LoadTaiXe()
        {
            cmbTaiXe.DataSource = TaiXeBLL.GetList(DBContext);
            cmbTaiXe.DisplayMember = "TenDayDu";
            cmbTaiXe.ValueMember = "IDTaiXe";
        }
        void LoadPhanCongLaiXe()
        {
            if (allowUpdate)
            {
                if (chkLoc.Checked)
                    bdBangPhanCongLaiXe.DataSource = PhanCongLaiXeBLL.GetList(int.Parse(cmbThang.Text), int.Parse(cmbNam.Text), DBContext);
                else
                    bdBangPhanCongLaiXe.DataSource = PhanCongLaiXeBLL.GetList(0, 0, DBContext);
                dgPhanCongLaiXe.DataSource = bdBangPhanCongLaiXe;
                lbSoBanGhi.Text = dgPhanCongLaiXe.Rows.Count.ToString();
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            isAdd = true;
            btnThem.Enabled = false;
            btnHieuChinh.Enabled = btnXoa.Enabled = false;
            chkTraXe.Enabled = false;
            chkTraXe.Checked = false;
            InitModeEdit();
            cmbSoXe.Enabled = cmbTaiXe.Enabled = dtNgayNhanXe.Enabled = nNhienLieuNhan.Enabled = true;
            btnLuu.Enabled = true;
            btnBoQua.Visible = true;
            dgPhanCongLaiXe.Enabled = false;
            cmbSoXe.Focus();
        }

        private void bdPhanCongLaiXe_CurrentChanged(object sender, EventArgs e)
        {
            var current = bdBangPhanCongLaiXe.Current as PhanCongLaiXe;
            if (current != null)
            {
                btnHieuChinh.Enabled = btnXoa.Enabled = true;
                cmbSoXe.SelectedValue = current.SoXe;
                cmbTaiXe.SelectedValue = current.IDTaiXe;
                nNhienLieuNhan.Value = (decimal)current.LuongNhienLieuKhiNhanXe;
                dtNgayNhanXe.Value = current.NgayNhanXe;
                if (current.NgayTraXe.HasValue)
                {
                    chkTraXe.Checked = true;
                    dtNgayTraXe.Value = current.NgayTraXe.Value;
                    nNhienLieuTra.Value = current.LuongNhienLieuKhiTraXe.HasValue ? (decimal)current.LuongNhienLieuKhiTraXe.Value : 0;
                }
                else
                {
                    chkTraXe.Checked = false;
                    nNhienLieuTra.Value = 0;
                }
            }
            else
                btnHieuChinh.Enabled = btnXoa.Enabled = false;
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            InitInterface();
            dgPhanCongLaiXe.Enabled = true;
        }

        private void btnHieuChinh_Click(object sender, EventArgs e)
        {
            isAdd = false;
            btnHieuChinh.Enabled = false;
            btnThem.Enabled = btnXoa.Enabled = false;
            chkTraXe.Enabled = true;
            InitModeEdit();
            cmbSoXe.Enabled = cmbTaiXe.Enabled = dtNgayNhanXe.Enabled = nNhienLieuNhan.Enabled = true;
            btnLuu.Enabled = true;
            btnBoQua.Visible = true;
            dgPhanCongLaiXe.Enabled = false;
        }

        bool ValidateData()
        {
            errorNotify.Clear();
            if (cmbSoXe.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbSoXe, "Bạn chưa chọn xe");
                cmbSoXe.Focus();
                return false;
            }
            if (cmbTaiXe.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbTaiXe, "Bạn chưa chọn xe");
                cmbTaiXe.Focus();
                return false;
            }
            return true;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            bool isSuccess = false;
            if (ValidateData())
            {
                if (isAdd)
                {
                    //Thêm
                    PhanCongLaiXe pc = new PhanCongLaiXe();
                    pc.IDTaiXe = int.Parse(cmbTaiXe.SelectedValue.ToString());
                    pc.SoXe = cmbSoXe.SelectedValue.ToString();
                    pc.NgayNhanXe = dtNgayNhanXe.Value.Date;
                    pc.LuongNhienLieuKhiNhanXe = (double)nNhienLieuNhan.Value;
                    var rs = PhanCongLaiXeBLL.Add(pc, DBContext);
                    if (rs == CODE_RESULT_RETURN.MaTrung)
                        DialogUtils.ShowMessage("Bạn đã phân công tài xế lái xe này rồi");
                    else if (rs == CODE_RESULT_RETURN.TenTrung)
                        DialogUtils.ShowMessage("Xe này vẫn chưa được tài xế cũ trả");
                    else
                        isSuccess = true;
                }
                else
                {
                    //Cập nhật
                    var current = bdBangPhanCongLaiXe.Current as PhanCongLaiXe;
                    if (current != null)
                    {
                        PhanCongLaiXe pc = new PhanCongLaiXe();
                        pc.IDPhanCong = current.IDPhanCong;
                        pc.IDTaiXe = int.Parse(cmbTaiXe.SelectedValue.ToString());
                        pc.SoXe = cmbSoXe.SelectedValue.ToString();
                        pc.NgayNhanXe = dtNgayNhanXe.Value.Date;
                        pc.LuongNhienLieuKhiNhanXe = (double)nNhienLieuNhan.Value;
                        if (chkTraXe.Checked)
                        {
                            pc.NgayTraXe = dtNgayTraXe.Value.Date;
                            pc.LuongNhienLieuKhiTraXe = (double)nNhienLieuTra.Value;
                        }
                        var rs = PhanCongLaiXeBLL.Update(pc, DBContext);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                            DialogUtils.ShowMessage("Cập nhật dữ liệu thất bại");
                        else
                            isSuccess = true;
                    }
                }
                if (isSuccess)
                {
                    InitInterface();
                }
            }

        }

        private void chkLoc_CheckedChanged(object sender, EventArgs e)
        {
            InitLoc();
        }

        void InitLoc()
        {
            if (chkLoc.Checked)
            {
                allowUpdate = false;
                if (cmbThang.Text.IsNullOrEmpty())
                    cmbThang.Text = DateTime.Now.Date.Month.ToString();
                if (cmbNam.Text.IsNullOrEmpty())
                    cmbNam.Text = DateTime.Now.Year.ToString();
                cmbThang.Enabled = cmbNam.Enabled = true;
                allowUpdate = true;
                LoadPhanCongLaiXe();
            }
            else
            {
                cmbThang.Enabled = cmbNam.Enabled = false;
                LoadPhanCongLaiXe();
            }
        }

        private void chkTraXe_CheckedChanged(object sender, EventArgs e)
        {
            InitModeEdit();
        }
        void InitModeEdit()
        {
            if (chkTraXe.Checked && chkTraXe.Enabled == true)
                dtNgayTraXe.Enabled = nNhienLieuTra.Enabled = true;
            else
                dtNgayTraXe.Enabled = nNhienLieuTra.Enabled = false;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (DialogUtils.ShowYesNo("Bạn có chắc muốn xóa") == DialogResult.Yes)
            {
                var current = bdBangPhanCongLaiXe.Current as PhanCongLaiXe;
                if (current != null)
                {
                    var rs = PhanCongLaiXeBLL.Delete(current.IDPhanCong);
                    if (rs == CODE_RESULT_RETURN.ThatBai)
                        DialogUtils.ShowError("Không thể xóa");
                    else
                        InitInterface();
                }
            }
        }

        private void cmbThang_Validating(object sender, CancelEventArgs e)
        {
            int o = 0;
            if (!int.TryParse(((ComboBox)sender).Text, out o))
            {
                e.Cancel = true;
                DialogUtils.ShowError("Vui lòng nhập tháng đúng");
            }
        }

        private void cmbThang_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadPhanCongLaiXe();
        }

        private void cmbNam_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadPhanCongLaiXe();
        }

        private void UCBangPhanCongLaiXe_ControlRemoved(object sender, ControlEventArgs e)
        {
            if (_dbContext != null)
                _dbContext.Dispose();
        }
    }
}
